/*
 * Copyright (C), 2002-2017, 苏宁易购电子商务有限公司
 * FileName: ActivityDao.java
 * Author:   15050536
 * Date:     2017年3月24日 下午6:24:55
 * Description: //模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.suning.sawp.member.dao;

import java.util.List;
import java.util.Map;

import com.suning.sawp.member.dto.Activity;
import com.suning.sawp.member.dto.ActivityStore;
import com.suning.sawp.member.dto.CustomerDetail;
import com.suning.sawp.member.dto.ExpandEmployee;
import com.suning.sawp.member.dto.MemCustomer;
import com.suning.sawp.member.dto.StoreCate;
import com.suning.sawp.member.dto.StoreExpand;
import com.suning.sawp.member.vo.ActivityListVo;
import com.suning.sawp.member.vo.CustomerVo;
import com.suning.sawp.member.vo.MemberExtensionStatisVo;
import com.suning.sawp.member.vo.StoreExpandEmployeeVo;
import com.suning.sawp.member.vo.StoreExpandVo;

/**
 * 新会员拓展 活动 dao
 *
 * @author 15050536 石键平
 */
public interface ActivityDao {

	/**
	 * 查询某门店，创建时间范围内的活动数量
	 *
	 * @param storeCode
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public Long countActivityNumPerMonth(String storeCode, String startTime, String endTime);

	/**
	 * 
	 * 保存活动
	 *
	 * @param activity
	 * @return
	 */
	public boolean saveActivity(Activity activity);

	/**
	 * 
	 * 动态更新活动
	 *
	 * @param activity
	 * @return
	 */
	public boolean updateActivity(Activity activity);

	/**
	 * 
	 * 保存活动与门店对象
	 *
	 * @param activityStore
	 * @return
	 */
	public boolean saveActivityStore(ActivityStore activityStore);

	/**
	 * 
	 * 其实就是修改门店的目标金额
	 *
	 * @param activity
	 * @return
	 */
	public boolean updateActivityStore(ActivityStore activityStore);

	/**
	 * 
	 * 批量保存活动与门店对象
	 *
	 * @param activityStore
	 * @return
	 */
	public boolean batchSaveActivityStores(List<ActivityStore> activityStores);

	/**
	 * 
	 * 批量保存门店与品类对象
	 *
	 * @param storeCates
	 * @return
	 */
	public boolean batchSaveStoreCates(List<StoreCate> storeCates);

	/**
	 * 
	 * 保存门店品类对象
	 *
	 * @param storeCate
	 * @return
	 */
	public boolean saveStoreCates(StoreCate storeCate);

	/**
	 * 
	 * 动态更新门店品类数据
	 *
	 * @param storeCate
	 * @return
	 */
	public boolean updateStoreCates(StoreCate storeCate);

	/**
	 * 
	 * 功能描述: 查询活动信息<br>
	 *
	 * @param id
	 * @return
	 */
	public Activity selectActivityInfoById(String id);

	/**
	 * 
	 * 根据活动id 和 门店编码 查询活动门店关联对象
	 *
	 * @param activityId
	 * @param storeCode
	 * @return
	 */
	public ActivityStore findActivityStoreByActivityIdAndStoreCode(Long activityId, String storeCode);

	/**
	 * 查询活动关联的门店列表
	 *
	 * @param activityId
	 * @return
	 */
	public List<ActivityStore> queryActivityStoresByActivityId(Long activityId);

	/**
	 * 
	 * 根据活动id和门店编码，查询此门店参与的品类信息列表
	 *
	 * @param activityId
	 * @param storeCode
	 * @return
	 */
	public List<StoreCate> queryStoreCatesByActivityIdAndStoreCode(Long activityId, String storeCode);

	/**
	 * 店长查询活动列表时候调用的方法
	 *
	 * @param map
	 *            包含的参数 status,storeCode,startIndex,pageSize
	 * @return
	 */
	public List<ActivityListVo> queryActivityList4DZ(Map<String, Object> map);

	/**
	 * 督导查询活动列表时候调用的方法
	 *
	 * @param map
	 *            包含的参数 status,storeCode,cateCode,startIndex,pageSize
	 * @return
	 */
	public List<ActivityListVo> queryActivityList4DD(Map<String, Object> map);

	/**
	 * 店员查询活动列表时候调用的方法
	 *
	 * @param map
	 *            包含的参数 employeeId,startIndex,pageSize
	 * @return
	 */
	public List<ActivityListVo> queryActivityList4DY(Map<String, Object> map);

	/**
	 * 查询活动列表总数量-店长维度
	 */
	public Long countActivityList4DZ(Map<String, Object> map);

	/**
	 * 查询活动列表总数量-督导维度
	 */
	public Long countActivityList4DD(Map<String, Object> map);

	/**
	 * 查询活动列表总数量-店员维度
	 */
	public Long countActivityList4DY(Map<String, Object> map);

	/**
	 * 
	 * 查询活动统计信息，基于活动，门店，品类（督导维度）
	 *
	 * @param map
	 *            activityId,storeCode,cateCode
	 * @return
	 */
	public ActivityListVo findActivityStatisticByCate(Map<String, Object> map);

	/**
	 * 
	 * 按拓展任务分组，查询活动的统计信息
	 *
	 * @param map
	 *            storeCateId(findActivityStatisticByCate方法返回的),startIndex,
	 *            pageSize
	 * @return
	 */
	public List<StoreExpandVo> queryExpandStatistic4Activity(Map<String, Object> map);

	/**
	 * 
	 * 查询某活动下,某门店，某品类 拓展的地点总数量
	 *
	 * @param map
	 * @return
	 */
	public Long countExpandStatistic4Activity(Map<String, Object> map);

	/**
	 * 
	 * 查询某活动下,某门店，拓展的地点总数量
	 *
	 * @param activityId
	 *            活动id
	 * @param storeCode
	 *            门店编码
	 * @return
	 */
	public Long countExpandByActivityIdAndStoreCode(Long activityId, String storeCode);

	/**
	 * 根据拓展id查询拓展信息
	 *
	 * @param expandId
	 * @return
	 */
	public StoreExpandVo findExpandById(Long expandId);

	/**
	 * 查询拓展员工列表，根据拓展id
	 * 
	 * @param expandId
	 * @return
	 */
	public List<StoreExpandEmployeeVo> queryEmployeesByExpandId(Long expandId);

	/**
	 * 
	 * 根据主键查询storeCate
	 *
	 * @param storeCateId
	 * @return
	 */
	public StoreCate findStoreCateById(Long storeCateId);

	/**
	 * 保存拓展活动
	 *
	 * @param storeExpand
	 *            待保存的拓展活动
	 */
	public boolean saveStoreExpand(StoreExpand storeExpand);

	/**
	 * 
	 * 更新拓展活动
	 *
	 * @param storeExpand
	 *            待保存的拓展活动
	 */
	public boolean updateStoreExpand(StoreExpand storeExpand);

	/**
	 * 根据拓展id，删除关联的店员
	 */
	public boolean deleteEmployeeByExpandId(Long expandId);

	/**
	 * 
	 * 批量保存拓展会员信息
	 *
	 * @param expandEmployee
	 */
	public boolean batchSaveExpandEmployee(List<ExpandEmployee> expandEmployees);

	/**
	 * 
	 * 根据活动id查询某活动的拓展人数
	 *
	 * @param activityId
	 * @return
	 */
	public Long countCustomerByActivityId(Long activityId);

	/**
	 * 
	 * 根据任务id查询某任务地点的拓展人数
	 *
	 * @param expandId
	 * @return
	 */
	public Long countCustomerByExpandId(Long expandId);

	/**
	 * 删除活动
	 * 
	 * @param activityId
	 * @return
	 */
	public boolean deleteActivityById(Long activityId);

	/**
	 * 
	 * 删除任务
	 *
	 * @param expandId
	 * @return
	 */
	public boolean deleteExpandById(Long expandId);

	/**
	 * 删除门店品类
	 * 
	 * @param activityId
	 * @return
	 */
	public boolean deleteStoreCateById(Long storeCateId);

	/**
	 * 
	 * 根据状态查询的活动列表
	 *
	 * @param storeCode
	 * @param status
	 *            0：进行中的，1：已结束的
	 * @return
	 */
	public List<ActivityListVo> queryActiveActivities(String storeCode, String status);

	/**
	 * 
	 * 根据手机号查询会员基本信息
	 *
	 * @param mobile
	 * @return
	 */
	public CustomerVo findCustomerByPhone(String mobile, String staffId);

	/**
	 * 
	 * 根据手机号，来源，店员工号查询会员详情信息
	 *
	 * @param mobile
	 *            手机号
	 * @param source
	 *            来源
	 * @param employeeId
	 *            店员工号
	 * @return
	 */
	public CustomerVo findCustomerDetailByPhoneSourceEmployeeId(String mobile, String source, String employeeId);

	/**
	 * 
	 * 判断某个用户同一门店只能参加一次活动
	 *
	 * @param mobile
	 * @param storeCode
	 * @param activityId
	 * @return
	 */
	public boolean checkCustomerJoinActivity(String mobile, String storeCode, Long activityId);

	/**
	 * 查询意向品类列表
	 * 
	 * @param custDetailId
	 *            会员详情表id
	 */
	public List<Map<String, Object>> queryIntentCateByCustDetailId(String custDetailId);

	/**
	 * 查询意向商品列表
	 * 
	 * @param custDetailId
	 *            会员详情表id
	 */
	public List<Map<String, Object>> queryIntentCmmdtyByCustDetailId(String custDetailId);

	/**
	 * 查询某员工参与某活动总的统计信息
	 *
	 * @param activityId
	 *            活动id
	 * @param storeCode
	 *            门店编码
	 * @param employeeId
	 *            店员工号
	 * @return
	 */
	public MemberExtensionStatisVo findPlaceStatistics4Emp(Long activityId, String storeCode, String employeeId);

	/**
	 * 查询某员工参与某活动被分配到的地点列表
	 *
	 * @param activityId
	 *            活动id
	 * @param storeCode
	 *            门店编码
	 * @param employeeId
	 *            店员工号
	 * @return
	 */
	public List<StoreExpandVo> queryPlaceList4Emp(Long activityId, String storeCode, String employeeId, int startIndex, int pageSize);

	/**
	 * 
	 * 查询某员工参与某活动被分配到的地点列表数目
	 *
	 * @param activityId
	 *            活动id
	 * @param storeCode
	 *            门店编码
	 * @param employeeId
	 *            店员工号
	 */
	public Long countPlaceList4Emp(Long activityId, String storeCode, String employeeId);

	/**
	 * 
	 * 根据考核结束时间查询活动列表
	 *
	 * @param endTime
	 * @return
	 */
	public List<Activity> queryActivityListByEndTime(String endTime);

	/**
	 * 根据活动id,删除对应的销售记录
	 * 
	 * @param activityId
	 */
	public void delSaleByActivityId(Long activityId);

	/**
	 * 查询当前时间范围内正在考核的活动，关联的非会员客户<br/>
	 * 给定时器用的，定时拉取这些客户，查询他们是否是会员
	 */
	public List<CustomerVo> queryNoMemberCust();

	/**
	 * 将老客户表中的数据导入到新客户表中
	 */
	public void moveOldCust2New(String createTime);

	/**
	 * 将客户 详情表的数据，转到客户列表表中
	 */
	public void moveDetailToList(String createTime);

	/**
	 * 根据条件查询mem_customer_detail客户详情
	 *
	 * @param custNo
	 *            会员编码
	 * @param employeeId
	 *            发展的店员
	 * @param source
	 *            来源
	 * @return
	 */
	public CustomerDetail queryCustomerDetailByParams(String custNo, String employeeId, String source);

	/**
	 * 根据客户表名和发展人，查询mem_customer表中的会员数据
	 *
	 * @param custNo
	 * @param employeeId
	 */
	public MemCustomer queryCustomerByParams(String custNo, String employeeId);
}
